package org.excilys.training.ebanking.iservice;
import java.util.List;

import org.excilys.training.ebanking.model.Compte;


public interface IServiceCompte {
	
	/**
	 * Méthode permettant au cliant de récuperer le solde d'un compte
	 * donnée
	 * <p>
	 * @param id numéro d'un compte
	 * 
	 * @return   Solde du compte
	 * 
	 */
	double getSolde(int id);
	
	/**
	 * Méthode recupérant la liste de comptes d'un client donné
	 * <p>
	 * @param id dentifiant d'un client
	 * 
	 * @return   liste des comptes d'un client
	 * */
	List<Compte> getAllAccountById(int id);
	
	
	/**
	 * Méthode retournant un compte a l'aide de son identifiant
	 * <p>
	 * 
	 * @param id numero de compte
	 * 
	 * @return compte
	 */
	Compte getAccount(int id);
	
	/**
	 * méthode permettant de calculer l'encours d'un compte donné
	 * <p>
	 * @param id numéro de compte
	 * 
	 * @return encours du compte
	 */
	double getEncours(int id);
	
	/**
	 * Méthode permettant de calculer le solde prévisonnel d'un 
	 * compte donné
	 * <p>
	 * @param id numéro de compte
	 * 
	 * @return solde prévisionnel du compte
	 */
	double getSoldePrevisonnel(int id);
	
	void debitCompte(int idCompteSource, int idCompteCible, String libelle, double montant, int idTypeOperation);
	
	void creditCompte(int idCompteSource, int idCompteCible, String libelle, double montant, int idTypeOperation);
	
	void transfertInterne(int idCompteSource, int idCompteCible, double montant, int idTypeOperation);
	
	void transfertExterne(int idCompteSource, int idCompteCible, double montant, int idTypeOperation);
	
	boolean testSoldeCompte(int idCompte, double montant);

}
